package binary;

import java.sql.SQLOutput;

/**
 * 补码的演示：
 * 计算机处理有符号数（正负数）的一种编码方式
 * 以4位2进制为例讲解补码的编码规则：
 *   ·计算的时候如果超出4位则高位自动溢出舍弃，保持4位不变
 *   ·将4位2进制数分一半作为负数
 *   ·最高位称为符号位，高位为1是负数，高位为0是正数
 * 规律数：
 *   ·0111为4位补码的最大值，规律是1个0和3个1，可以推导出
 *    32位补码的最大值：1个0和31个1
 *   ·1000为4位补码的最小值，规律是1个和3个0，可以推导出
 *    32位补码的最小值：1个1和31个0
 *   ·1111为4位补码的-1，规律是4个1,可以推导出
 *    32位补码-1：32个1
 * 深入理解负值：
 *    记住32位2进制数的-1的编码：32个1
 *    负值：用-1减去0位置的权
 */
public class ComplementDemo {
    public static void main(String[] args) {
        //规律数：
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        System.out.println(Integer.toBinaryString(max));//01111111111111111111111111111111
        System.out.println(Integer.toBinaryString(min));//10000000000000000000000000000000
        System.out.println(Integer.toBinaryString(-1));//11111111111111111111111111111111

        int n = -45;
        System.out.println(Integer.toBinaryString(n));//2进制显示
        System.out.println(n);//10进制显示
    }
}
